home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tricks of the Mac Game Programming Gurus
/
TricksOfTheMacGameProgrammingGurus.iso
/
Book Chapters
/
Appendix A - Top Speed
/
Overhead
/
Overhead.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-03-08
|
3KB
|
117 lines
#include <stdio.h>
#define kLoopNumber 30000
#define SetPtMacro(p,hh,vv) p.h=hh;p.v=vv
/* Standard inits */
static void InitToolbox(void) {
InitGraf (&qd.thePort);
InitFonts ();
FlushEvents (everyEvent,0);
InitWindows ();
InitMenus ();
TEInit ();
InitDialogs (nil);
InitCursor ();
} /*InitToolbox*/
void MySetPt(Point *thePoint, short h, short v)
{
thePoint->h = h;
thePoint->v = v;
} /*MySetPt*/
typedef pascal void (*SetPtPtr)(Point *, short, short);
void main(void)
{
long timeBefore,timeAfter;
short loop;
Point myPoint;
SetPtPtr setPtAddress;
InitToolbox();
timeBefore = TickCount();
for (loop = 0; loop < kLoopNumber; loop++)
{
SetPt(&myPoint, loop, loop);
SetPt(&myPoint, loop, loop);
SetPt(&myPoint, loop, loop);
SetPt(&myPoint, loop, loop);
SetPt(&myPoint, loop, loop);
SetPt(&myPoint, loop, loop);
SetPt(&myPoint, loop, loop);
SetPt(&myPoint, loop, loop);
SetPt(&myPoint, loop, loop);
SetPt(&myPoint, loop, loop);
}
timeAfter = TickCount();
printf("Trap call: %ld ticks for %ld calls.\n", timeAfter-timeBefore, (long)kLoopNumber*10);
setPtAddress = (SetPtPtr) NGetTrapAddress(_SetPt,ToolTrap);
// _SetPt = $A880;
timeBefore = TickCount();
for (loop = 0; loop < kLoopNumber; loop++)
{
(*setPtAddress)(&myPoint, loop, loop);
(*setPtAddress)(&myPoint, loop, loop);
(*setPtAddress)(&myPoint, loop, loop);
(*setPtAddress)(&myPoint, loop, loop);
(*setPtAddress)(&myPoint, loop, loop);
(*setPtAddress)(&myPoint, loop, loop);
(*setPtAddress)(&myPoint, loop, loop);
(*setPtAddress)(&myPoint, loop, loop);
(*setPtAddress)(&myPoint, loop, loop);
(*setPtAddress)(&myPoint, loop, loop);
}
timeAfter = TickCount();
printf("Trap direct: %ld ticks for %ld calls.\n", timeAfter-timeBefore, (long)kLoopNumber*10);
timeBefore = TickCount();
for (loop = 0; loop < kLoopNumber; loop++)
{
MySetPt(&myPoint, loop, loop);
MySetPt(&myPoint, loop, loop);
MySetPt(&myPoint, loop, loop);
MySetPt(&myPoint, loop, loop);
MySetPt(&myPoint, loop, loop);
MySetPt(&myPoint, loop, loop);
MySetPt(&myPoint, loop, loop);
MySetPt(&myPoint, loop, loop);
MySetPt(&myPoint, loop, loop);
MySetPt(&myPoint, loop, loop);
}
timeAfter = TickCount();
printf("Function call: %ld ticks for %ld calls.\n", timeAfter-timeBefore, (long)kLoopNumber*10);
timeBefore = TickCount();
for (loop = 0; loop < kLoopNumber; loop++)
{
SetPtMacro(myPoint, loop, loop);
SetPtMacro(myPoint, loop, loop);
SetPtMacro(myPoint, loop, loop);
SetPtMacro(myPoint, loop, loop);
SetPtMacro(myPoint, loop, loop);
SetPtMacro(myPoint, loop, loop);
SetPtMacro(myPoint, loop, loop);
SetPtMacro(myPoint, loop, loop);
SetPtMacro(myPoint, loop, loop);
SetPtMacro(myPoint, loop, loop);
}
timeAfter = TickCount();
printf("Macro: %ld ticks for %ld calls.\n", timeAfter-timeBefore, (long)kLoopNumber*10);
} /*main*/